package com.zixuan.sina.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zixuan.sina.dao.PermissionMapper;
import com.zixuan.sina.dao.UserMapper;
import com.zixuan.sina.entity.Permission;
import com.zixuan.sina.entity.User;
import com.zixuan.sina.service.PermissionService;
import com.zixuan.sina.utils.MenuUtils;
import com.zixuan.sina.utils.Result;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author lemon
 * @since 2023-10-12
 */
@Service
public class PermissionServiceImpl  extends ServiceImpl<PermissionMapper, Permission> implements PermissionService {
  @Resource
    MenuUtils menuUtils;

    @Override
    public List<Permission> findPermissionByUserId(String userId) {
        return baseMapper.findPermissionByUserId(userId);
    }

    @Override
    public Result getPermissionList() {
        List<Permission> permissions = menuUtils.generateMenu();
//        permissions=permissions.stream().distinct().collect(Collectors.toList());
        return Result.ok(permissions);
    }

    @Override
    public Result add(Permission permission) {
        return null;
    }

    @Override
    public Result delete(String id) {
        return null;
    }

    @Override
    public Result update(Permission permission) {
        return null;
    }

    @Override
    public Result getPermissionParentList() {
        return null;
    }

    @Override
    public List<Permission> listAllPermission(List<Permission> roles) {
        return null;
    }

    @Override
    public List<Long> getPermissionIds(Long roleId) {
        return null;
    }

    @Override
    public List<Permission> listAll() {
        return baseMapper.selectList(null);
    }
//    @Resource
//    PermissionMapper permissionMapper;

//
//   public  List<Permission> findPermissionByUserId(Long userId){
//        return permissionMapper.findPermissionByUserId(userId);
//    }
//
//    @Override
//    public Result getPermissionList() {
//        List<Permission> permissions = permissionMapper.selectList(null);
//        List<Permission> result = MenuTree.makeMenuList(permissions, 0L);
//        return Result.ok(result);
//    }
//
//    @Override
//    public Result add(Permission permission) {
//        if(permission.getParentId().equals(permission.getId())){
//            return Result.error().message("不能设置自己为上级");
//        }
//        int row = permissionMapper.insert(permission);
//        if(row<1){
//            return Result.error().message("权限创建失败");
//        }
//        return Result.ok().message("权限创建成功");
//    }
//
//    @Override
//    public Result delete(String id) {
//       //如果存在子权限不予删除
//        QueryWrapper<Permission> wrapper = new QueryWrapper<>();
//        wrapper.eq("parent_id",id);
//        Long count = permissionMapper.selectCount(wrapper);
//        if(count>0){
//
//            return Result.error().message("当前权限下存在子权限 不予删除");
//        }
//        int row = permissionMapper.deleteById(id);
//        if(row<1){
//            return Result.error().message("权限删除失败");
//        }
//        return Result.ok().message("权限删除成功");
//    }
//
//    @Override
//    public Result update(Permission permission) {
//       if(permission.getParentId().equals(permission.getId())){
//           return Result.error().message("不能设置自己为上级");
//       }
//        int row = permissionMapper.updateById(permission);
//        if(row<1){
//            return Result.error().message("权限更新失败");
//        }
//        return Result.ok().message("权限更新成功");
//    }
//
//    @Override
//    public Result getPermissionParentList() {
//        List<Permission> permissions = permissionMapper.selectList(null);
//        Permission permission = new Permission();
//        permission.setLabel("顶级菜单");
//        permission.setId(0L);
//        permission.setParentId(-1L);
//        permissions.add(permission);
//        List<Permission> result = MenuTree.makeMenuList(permissions, -1L);
//
//        return Result.ok(result);
//    }
//
//    @Override
//    public List<Permission> listAllPermission(List<Permission> roles) {
//        return permissionMapper.listAllPermission(roles);
//    }
//
//    @Override
//    @Transactional(rollbackFor = RuntimeException.class)
//    public Result assignPermission(AssignVo assignVo) {
//       //先删除角色原有的权限
//       permissionMapper.deletePermission(assignVo.getRoleId());
//
//        //再添加新的权限
//      permissionMapper.assignPermission(assignVo.getRoleId(),assignVo.getPermissionId());
//
//        return Result.ok().message("权限操作成功");
//    }
//
//    @Override
//    public List<Long> getPermissionIds(Long roleId) {
//        return  permissionMapper.getPermissionIds(roleId);
//    }
}
